//! 词法单元（Token）定义
//! 
//! 定义词法分析器识别的所有词法单元类型

/// 词法单元类型
#[derive(Debug, Clone, PartialEq)]
pub enum Token {
    /// 标识符（指令名、寄存器名、标签名等）
    Identifier(String),
    /// 数字（十进制、十六进制、二进制）
    Number(i64),
    /// 字符串字面量（使用中文双引号“和”）
    StringLiteral(String),
    /// 逗号（中文逗号 ，）
    Comma,
    /// 左方括号（中文左方括号 【）
    LeftBracket,
    /// 右方括号（中文右方括号 】）
    RightBracket,
    /// 加号 +（英文符号）
    Plus,
    /// 减号 -（英文符号）
    Minus,
    /// 乘号 *（英文符号，用于比例因子）
    Asterisk,
    /// 冒号（中文冒号 ：，用于标签）
    Colon,
    /// 换行符
    Newline,
    /// 文件结束
    Eof,
}

impl Token {
    /// 获取 Token 的字符串表示（用于调试）
    pub fn to_string(&self) -> String {
        match self {
            Token::Identifier(s) => format!("标识符({})", s),
            Token::Number(n) => format!("数字({})", n),
            Token::StringLiteral(s) => format!("字符串({})", s),
            Token::Comma => "逗号".to_string(),
            Token::LeftBracket => "左方括号".to_string(),
            Token::RightBracket => "右方括号".to_string(),
            Token::Plus => "加号".to_string(),
            Token::Minus => "减号".to_string(),
            Token::Asterisk => "乘号".to_string(),
            Token::Colon => "冒号".to_string(),
            Token::Newline => "换行符".to_string(),
            Token::Eof => "文件结束".to_string(),
        }
    }
}

